#ifndef SPREADSHEETVIEW_H
#define SPREADSHEETVIEW_H
//自定义视图类 可视化呈现与交互 只关注信号的发生
#include <QTableView>
#include <QHeaderView>
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>
#include <QStandardItemModel>
#include <QScrollBar>
#include <QMainWindow>

class SpreadsheetView : public QTableView
{
    Q_OBJECT
public:
    //初始化
    explicit SpreadsheetView(QWidget *parent = nullptr);
    ~SpreadsheetView();

signals:
    //信号
    void scrolledToBottom();  // 滚动到底部信号
    void scrolledToRight();  // 到最右部信号
    void requestContextMenu(const QPoint &pos);//右键请求菜单
    void clearSelectedCells();//清除信号

protected:
    //各种重写函数
    void paintEvent(QPaintEvent *event) override;//绘画函数
    void mousePressEvent(QMouseEvent *event) override;//鼠标选择单元格
    void mouseDoubleClickEvent(QMouseEvent *event) override;//鼠标创建单元格
    void keyPressEvent(QKeyEvent *event) override;//鼠标按住
    void scrollContentsBy(int dx, int dy) override;//滚动条滚动
    bool eventFilter(QObject* watched, QEvent* event) override;//事件过滤器
    void contextMenuEvent(QContextMenuEvent *event) override;//创建菜单项内容

private:
    //内部辅助成员
    void initViewStyle();//初始化样式
    bool m_isDraggingScrollBar;//鼠标是否按住滚动条
    int m_lastSelectedRow; // 记录上一次选中的行
    int m_lastSelectedCol;//记录上一次选中的列
    void checkForRowExpansion(int);//检查光标是否到达底部
    void checkForColExpansion(int);//检查光标是否到达最右部

};
#endif // SPREADSHEETVIEW_H
